const jwt = require('jsonwebtoken');

module.exports = () => {
    // 返回一个中间件函数
    return async (ctx, next) => {
        // 获取用户信息
        if (ctx.path === '/login' || ctx.path === '/register') {
            await next();
        } else {
            // 通过请求方式来判断是什么操作
            // 比如：我们定义的路由时，把 POST 请求 作为 添加操作
            // 把 PUT 请求 作为 修改操作、把 DELETE 请求 作为 删除操作
            // 把 GET 请求 作为 查看操作

            const token = ctx.headers.token;

            if (!token) {
                ctx.body = {
                    code: 401,
                    message: 'token 不存在，无法进行身份认证',
                };
                return;
            }

            const user = jwt.verify(token, '123123123');

            console.log('user', user);

            // 修改操作只能是 v0 身份才能调用
            if (ctx.method === 'PUT') {
                // 判断用户是不是 v0 身份
                if (user.rcode === 'v0' || user.rcode === 'v1') {
                    await next();
                } else {
                    ctx.body = {
                        code: 403,
                        message: '你无权访问该接口',
                    };
                    return;
                }
            } else if (ctx.method === 'DELETE') {
                if (user.rcode === 'v0') {
                    await next();
                } else {
                    ctx.body = {
                        code: 403,
                        message: '你无权访问该接口',
                    };
                    return;
                }
            } else {
                await next();
            }
        }
    };
};
